From ba0c4bda8083b0190ce5e0f38255b6e7b6fcffcf Mon Sep 17 00:00:00 2001 From: Sebastian Keller Date: Wed, 21 Jan 2026 19:50:33 +0100 Subject: [PATCH] st/spinner-content: Fix CoglTexture leak Most of the members were getting indirectly freed via the st_spinner_content_set_actor (spinner, NULL) and the subsequent st_spinner_content_invalidate () on destruction of the actor or changing of its content when the spinner is stopped. The texture however was not freed. This now frees all members explicitly on finalize. 208 (96 direct, 112 indirect) bytes in 1 blocks are definitely lost in loss record 20,960 of 22,464 at 0x4D37833: g_type_create_instance (gtype.c:1877) by 0x4D1C186: g_object_new_internal.part.0 (gobject.c:2666) by 0x4D1E0FA: g_object_new_internal (gobject.c:2982) by 0x4D1E0FA: g_object_new_valist (gobject.c:3004) by 0x4D1E488: g_object_new (gobject.c:2479) by 0x5A8B7CB: _cogl_texture_2d_create_base (cogl-texture-2d.c:84) by 0x572D668: st_spinner_content_paint_content (st-spinner-content.c:175) by 0x50D2C07: clutter_actor_paint_node (clutter-actor.c:3471) by 0x50D2C07: clutter_actor_continue_paint (clutter-actor.c:3726) by 0x511D4F9: clutter_paint_node_paint (clutter-paint-node.c:867) by 0x50D9717: clutter_actor_paint (clutter-actor.c:3670) by 0x574199A: st_viewport_paint (st-viewport.c:483) by 0x50D2C42: clutter_actor_continue_paint (clutter-actor.c:3728) by 0x511D4F9: clutter_paint_node_paint (clutter-paint-node.c:867) Part-of: --- src/st/st-spinner-content.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/st/st-spinner-content.c b/src/st/st-spinner-content.c index 925667c25..810e65463 100644 --- a/src/st/st-spinner-content.c +++ b/src/st/st-spinner-content.c @@ -77,9 +77,23 @@ st_spinner_content_init (StSpinnerContent *spinner) { } +static void +st_spinner_content_finalize (GObject *gobject) +{ + StSpinnerContent *spinner = ST_SPINNER_CONTENT (gobject); + + g_clear_object (&spinner->timeline); + g_clear_object (&spinner->actor); + g_clear_object (&spinner->texture); + g_clear_object (&spinner->buffer); + + G_OBJECT_CLASS (st_spinner_content_parent_class)->finalize (gobject); +} + static void st_spinner_content_class_init (StSpinnerContentClass *klass) { + G_OBJECT_CLASS (klass)->finalize = st_spinner_content_finalize; } static void -- 2.39.5